function getCDNIP(t, e) {
    var n = "";
    if (e = e || function () {
            }, !/^http.*\.(?:js|html)(?:\?|#|$)/.test(t))return e(n), void 0;
    var i = new XMLHttpRequest;
    i.onreadystatechange = function () {
        if (4 == i.readyState && (i.onreadystatechange = null, i.status >= 200 && i.status < 300 || 304 == i.status))try {
            n = i.getResponseHeader("X-Server-Ip") || i.getResponseHeader("x-server-ip") || "", e(n)
        } catch (t) {
            e(n)
        }
    };
    var o = Math.random();
    t += /\?/.test(t) ? "&r=" + o : "?r=" + o, i.open("head", t), i.send(null)
}
function parentIfText(t) {
    return "tagName" in t ? t : t.parentNode
}
function swipeDirection(t, e, n, i) {
    var o = Math.abs(t - e), r = Math.abs(n - i);
    return o >= r ? t - e > 0 ? "Left" : "Right" : n - i > 0 ? "Up" : "Down"
}
function longTap() {
    longTapTimeout = null, touch.last && touch.el && (touch.el.trigger("longTap"), touch = {})
}
function cancelLongTap() {
    longTapTimeout && clearTimeout(longTapTimeout), longTapTimeout = null
}
function cancelAll() {
    touchTimeout && clearTimeout(touchTimeout), tapTimeout && clearTimeout(tapTimeout), swipeTimeout && clearTimeout(swipeTimeout), longTapTimeout && clearTimeout(longTapTimeout), touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null, touch = {}
}
try {
    var Zepto = function () {
        function t(t) {
            return null == t ? String(t) : X[V.call(t)] || "object"
        }

        function e(e) {
            return "function" == t(e)
        }

        function n(t) {
            return null != t && t == t.window
        }

        function i(t) {
            return null != t && t.nodeType == t.DOCUMENT_NODE
        }

        function o(e) {
            return "object" == t(e)
        }

        function r(t) {
            return o(t) && !n(t) && Object.getPrototypeOf(t) == Object.prototype
        }

        function a(t) {
            return "number" == typeof t.length
        }

        function s(t) {
            return O.call(t, function (t) {
                return null != t
            })
        }

        function c(t) {
            return t.length > 0 ? E.fn.concat.apply([], t) : t
        }

        function u(t) {
            return t.replace(/::/g, "/").replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").replace(/([a-z\d])([A-Z])/g, "$1_$2").replace(/_/g, "-").toLowerCase()
        }

        function l(t) {
            return t in M ? M[t] : M[t] = new RegExp("(^|\\s)" + t + "(\\s|$)")
        }

        function f(t, e) {
            return "number" != typeof e || k[u(t)] ? e : e + "px"
        }

        function h(t) {
            var e, n;
            return $[t] || (e = N.createElement(t), N.body.appendChild(e), n = getComputedStyle(e, "").getPropertyValue("display"), e.parentNode.removeChild(e), "none" == n && (n = "block"), $[t] = n), $[t]
        }

        function p(t) {
            return "children" in t ? P.call(t.children) : E.map(t.childNodes, function (t) {
                return 1 == t.nodeType ? t : void 0
            })
        }

        function d(t, e, n) {
            for (T in e)n && (r(e[T]) || G(e[T])) ? (r(e[T]) && !r(t[T]) && (t[T] = {}), G(e[T]) && !G(t[T]) && (t[T] = []), d(t[T], e[T], n)) : e[T] !== b && (t[T] = e[T])
        }

        function m(t, e) {
            return null == e ? E(t) : E(t).filter(e)
        }

        function g(t, n, i, o) {
            return e(n) ? n.call(t, i, o) : n
        }

        function v(t, e, n) {
            null == n ? t.removeAttribute(e) : t.setAttribute(e, n)
        }

        function y(t, e) {
            var n = t.className, i = n && n.baseVal !== b;
            return e === b ? i ? n.baseVal : n : (i ? n.baseVal = e : t.className = e, void 0)
        }

        function w(t) {
            var e;
            try {
                return t ? "true" == t || ("false" == t ? !1 : "null" == t ? null : /^0/.test(t) || isNaN(e = Number(t)) ? /^[\[\{]/.test(t) ? E.parseJSON(t) : t : e) : t
            } catch (n) {
                return t
            }
        }

        function x(t, e) {
            e(t);
            for (var n in t.childNodes)x(t.childNodes[n], e)
        }

        var b, T, E, C, _, S, j = [], P = j.slice, O = j.filter, N = window.document, $ = {}, M = {},
            k = {"column-count": 1, columns: 1, "font-weight": 1, "line-height": 1, opacity: 1, "z-index": 1, zoom: 1},
            D = /^\s*<(\w+|!)[^>]*>/, L = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
            A = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, R = /^(?:body|html)$/i,
            q = /([A-Z])/g, I = ["val", "css", "html", "text", "data", "width", "height", "offset"],
            Z = ["after", "prepend", "before", "append"], B = N.createElement("table"), F = N.createElement("tr"),
            z = {tr: N.createElement("tbody"), tbody: B, thead: B, tfoot: B, td: F, th: F, "*": N.createElement("div")},
            U = /complete|loaded|interactive/, H = /^[\w-]*$/, X = {}, V = X.toString, W = {},
            J = N.createElement("div"), Y = {
                tabindex: "tabIndex",
                readonly: "readOnly",
                "for": "htmlFor",
                "class": "className",
                maxlength: "maxLength",
                cellspacing: "cellSpacing",
                cellpadding: "cellPadding",
                rowspan: "rowSpan",
                colspan: "colSpan",
                usemap: "useMap",
                frameborder: "frameBorder",
                contenteditable: "contentEditable"
            }, G = Array.isArray || function (t) {
                    return t instanceof Array
                };
        return W.matches = function (t, e) {
            if (!e || !t || 1 !== t.nodeType)return !1;
            var n = t.webkitMatchesSelector || t.mozMatchesSelector || t.oMatchesSelector || t.matchesSelector;
            if (n)return n.call(t, e);
            var i, o = t.parentNode, r = !o;
            return r && (o = J).appendChild(t), i = ~W.qsa(o, e).indexOf(t), r && J.removeChild(t), i
        }, _ = function (t) {
            return t.replace(/-+(.)?/g, function (t, e) {
                return e ? e.toUpperCase() : ""
            })
        }, S = function (t) {
            return O.call(t, function (e, n) {
                return t.indexOf(e) == n
            })
        }, W.fragment = function (t, e, n) {
            var i, o, a;
            return L.test(t) && (i = E(N.createElement(RegExp.$1))), i || (t.replace && (t = t.replace(A, "<$1></$2>")), e === b && (e = D.test(t) && RegExp.$1), e in z || (e = "*"), a = z[e], a.innerHTML = "" + t, i = E.each(P.call(a.childNodes), function () {
                a.removeChild(this)
            })), r(n) && (o = E(i), E.each(n, function (t, e) {
                I.indexOf(t) > -1 ? o[t](e) : o.attr(t, e)
            })), i
        }, W.Z = function (t, e) {
            return t = t || [], t.__proto__ = E.fn, t.selector = e || "", t
        }, W.isZ = function (t) {
            return t instanceof W.Z
        }, W.init = function (t, n) {
            var i;
            if (!t)return W.Z();
            if ("string" == typeof t)if (t = t.trim(), "<" == t[0] && D.test(t)) i = W.fragment(t, RegExp.$1, n), t = null; else {
                if (n !== b)return E(n).find(t);
                i = W.qsa(N, t)
            } else {
                if (e(t))return E(N).ready(t);
                if (W.isZ(t))return t;
                if (G(t)) i = s(t); else if (o(t)) i = [t], t = null; else if (D.test(t)) i = W.fragment(t.trim(), RegExp.$1, n), t = null; else {
                    if (n !== b)return E(n).find(t);
                    i = W.qsa(N, t)
                }
            }
            return W.Z(i, t)
        }, E = function (t, e) {
            return W.init(t, e)
        }, E.extend = function (t) {
            var e, n = P.call(arguments, 1);
            return "boolean" == typeof t && (e = t, t = n.shift()), n.forEach(function (n) {
                d(t, n, e)
            }), t
        }, W.qsa = function (t, e) {
            var n, o = "#" == e[0], r = !o && "." == e[0], a = o || r ? e.slice(1) : e, s = H.test(a);
            return i(t) && s && o ? (n = t.getElementById(a)) ? [n] : [] : 1 !== t.nodeType && 9 !== t.nodeType ? [] : P.call(s && !o ? r ? t.getElementsByClassName(a) : t.getElementsByTagName(e) : t.querySelectorAll(e))
        }, E.contains = function (t, e) {
            return t !== e && t.contains(e)
        }, E.type = t, E.isFunction = e, E.isWindow = n, E.isArray = G, E.isPlainObject = r, E.isEmptyObject = function (t) {
            var e;
            for (e in t)return !1;
            return !0
        }, E.inArray = function (t, e, n) {
            return j.indexOf.call(e, t, n)
        }, E.camelCase = _, E.trim = function (t) {
            return null == t ? "" : String.prototype.trim.call(t)
        }, E.uuid = 0, E.support = {}, E.expr = {}, E.map = function (t, e) {
            var n, i, o, r = [];
            if (a(t))for (i = 0; i < t.length; i++)n = e(t[i], i), null != n && r.push(n); else for (o in t)n = e(t[o], o), null != n && r.push(n);
            return c(r)
        }, E.each = function (t, e) {
            var n, i;
            if (a(t)) {
                for (n = 0; n < t.length; n++)if (e.call(t[n], n, t[n]) === !1)return t
            } else for (i in t)if (e.call(t[i], i, t[i]) === !1)return t;
            return t
        }, E.grep = function (t, e) {
            return O.call(t, e)
        }, window.JSON && (E.parseJSON = JSON.parse), E.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (t, e) {
            X["[object " + e + "]"] = e.toLowerCase()
        }), E.fn = {
            forEach: j.forEach,
            reduce: j.reduce,
            push: j.push,
            sort: j.sort,
            indexOf: j.indexOf,
            concat: j.concat,
            map: function (t) {
                return E(E.map(this, function (e, n) {
                    return t.call(e, n, e)
                }))
            },
            slice: function () {
                return E(P.apply(this, arguments))
            },
            ready: function (t) {
                return U.test(N.readyState) && N.body ? t(E) : N.addEventListener("DOMContentLoaded", function () {
                    t(E)
                }, !1), this
            },
            get: function (t) {
                return t === b ? P.call(this) : this[t >= 0 ? t : t + this.length]
            },
            toArray: function () {
                return this.get()
            },
            size: function () {
                return this.length
            },
            remove: function () {
                return this.each(function () {
                    null != this.parentNode && this.parentNode.removeChild(this)
                })
            },
            each: function (t) {
                return j.every.call(this, function (e, n) {
                    return t.call(e, n, e) !== !1
                }), this
            },
            filter: function (t) {
                return e(t) ? this.not(this.not(t)) : E(O.call(this, function (e) {
                    return W.matches(e, t)
                }))
            },
            add: function (t, e) {
                return E(S(this.concat(E(t, e))))
            },
            is: function (t) {
                return this.length > 0 && W.matches(this[0], t)
            },
            not: function (t) {
                var n = [];
                if (e(t) && t.call !== b) this.each(function (e) {
                    t.call(this, e) || n.push(this)
                }); else {
                    var i = "string" == typeof t ? this.filter(t) : a(t) && e(t.item) ? P.call(t) : E(t);
                    this.forEach(function (t) {
                        i.indexOf(t) < 0 && n.push(t)
                    })
                }
                return E(n)
            },
            has: function (t) {
                return this.filter(function () {
                    return o(t) ? E.contains(this, t) : E(this).find(t).size()
                })
            },
            eq: function (t) {
                return -1 === t ? this.slice(t) : this.slice(t, +t + 1)
            },
            first: function () {
                var t = this[0];
                return t && !o(t) ? t : E(t)
            },
            last: function () {
                var t = this[this.length - 1];
                return t && !o(t) ? t : E(t)
            },
            find: function (t) {
                var e, n = this;
                return e = "object" == typeof t ? E(t).filter(function () {
                    var t = this;
                    return j.some.call(n, function (e) {
                        return E.contains(e, t)
                    })
                }) : 1 == this.length ? E(W.qsa(this[0], t)) : this.map(function () {
                    return W.qsa(this, t)
                })
            },
            closest: function (t, e) {
                var n = this[0], o = !1;
                for ("object" == typeof t && (o = E(t)); n && !(o ? o.indexOf(n) >= 0 : W.matches(n, t));)n = n !== e && !i(n) && n.parentNode;
                return E(n)
            },
            parents: function (t) {
                for (var e = [], n = this; n.length > 0;)n = E.map(n, function (t) {
                    return (t = t.parentNode) && !i(t) && e.indexOf(t) < 0 ? (e.push(t), t) : void 0
                });
                return m(e, t)
            },
            parent: function (t) {
                return m(S(this.pluck("parentNode")), t)
            },
            children: function (t) {
                return m(this.map(function () {
                    return p(this)
                }), t)
            },
            contents: function () {
                return this.map(function () {
                    return P.call(this.childNodes)
                })
            },
            siblings: function (t) {
                return m(this.map(function (t, e) {
                    return O.call(p(e.parentNode), function (t) {
                        return t !== e
                    })
                }), t)
            },
            empty: function () {
                return this.each(function () {
                    this.innerHTML = ""
                })
            },
            pluck: function (t) {
                return E.map(this, function (e) {
                    return e[t]
                })
            },
            show: function () {
                return this.each(function () {
                    "none" == this.style.display && (this.style.display = ""), "none" == getComputedStyle(this, "").getPropertyValue("display") && (this.style.display = h(this.nodeName))
                })
            },
            replaceWith: function (t) {
                return this.before(t).remove()
            },
            wrap: function (t) {
                var n = e(t);
                if (this[0] && !n)var i = E(t).get(0), o = i.parentNode || this.length > 1;
                return this.each(function (e) {
                    E(this).wrapAll(n ? t.call(this, e) : o ? i.cloneNode(!0) : i)
                })
            },
            wrapAll: function (t) {
                if (this[0]) {
                    E(this[0]).before(t = E(t));
                    for (var e; (e = t.children()).length;)t = e.first();
                    E(t).append(this)
                }
                return this
            },
            wrapInner: function (t) {
                var n = e(t);
                return this.each(function (e) {
                    var i = E(this), o = i.contents(), r = n ? t.call(this, e) : t;
                    o.length ? o.wrapAll(r) : i.append(r)
                })
            },
            unwrap: function () {
                return this.parent().each(function () {
                    E(this).replaceWith(E(this).children())
                }), this
            },
            clone: function () {
                return this.map(function () {
                    return this.cloneNode(!0)
                })
            },
            hide: function () {
                return this.css("display", "none")
            },
            toggle: function (t) {
                return this.each(function () {
                    var e = E(this);
                    (t === b ? "none" == e.css("display") : t) ? e.show() : e.hide()
                })
            },
            prev: function (t) {
                return E(this.pluck("previousElementSibling")).filter(t || "*")
            },
            next: function (t) {
                return E(this.pluck("nextElementSibling")).filter(t || "*")
            },
            html: function (t) {
                return 0 === arguments.length ? this.length > 0 ? this[0].innerHTML : null : this.each(function (e) {
                    var n = this.innerHTML;
                    E(this).empty().append(g(this, t, e, n))
                })
            },
            text: function (t) {
                return 0 === arguments.length ? this.length > 0 ? this[0].textContent : null : this.each(function () {
                    this.textContent = t === b ? "" : "" + t
                })
            },
            attr: function (t, e) {
                var n;
                return "string" == typeof t && e === b ? 0 == this.length || 1 !== this[0].nodeType ? b : "value" == t && "INPUT" == this[0].nodeName ? this.val() : !(n = this[0].getAttribute(t)) && t in this[0] ? this[0][t] : n : this.each(function (n) {
                    if (1 === this.nodeType)if (o(t))for (T in t)v(this, T, t[T]); else v(this, t, g(this, e, n, this.getAttribute(t)))
                })
            },
            removeAttr: function (t) {
                return this.each(function () {
                    1 === this.nodeType && v(this, t)
                })
            },
            prop: function (t, e) {
                return t = Y[t] || t, e === b ? this[0] && this[0][t] : this.each(function (n) {
                    this[t] = g(this, e, n, this[t])
                })
            },
            data: function (t, e) {
                var n = this.attr("data-" + t.replace(q, "-$1").toLowerCase(), e);
                return null !== n ? w(n) : b
            },
            val: function (t) {
                return 0 === arguments.length ? this[0] && (this[0].multiple ? E(this[0]).find("option").filter(function () {
                        return this.selected
                    }).pluck("value") : this[0].value) : this.each(function (e) {
                    this.value = g(this, t, e, this.value)
                })
            },
            offset: function (t) {
                if (t)return this.each(function (e) {
                    var n = E(this), i = g(this, t, e, n.offset()), o = n.offsetParent().offset(),
                        r = {top: i.top - o.top, left: i.left - o.left};
                    "static" == n.css("position") && (r.position = "relative"), n.css(r)
                });
                if (0 == this.length)return null;
                var e = this[0].getBoundingClientRect();
                return {
                    left: e.left + window.pageXOffset,
                    top: e.top + window.pageYOffset,
                    width: Math.round(e.width),
                    height: Math.round(e.height)
                }
            },
            css: function (e, n) {
                if (arguments.length < 2) {
                    var i = this[0];
                    if ("string" == typeof e) {
                        if (!i)return;
                        return i.style[_(e)] || getComputedStyle(i, "").getPropertyValue(e)
                    }
                    if (G(e)) {
                        if (!i)return;
                        var o = {}, r = getComputedStyle(i, "");
                        return E.each(e, function (t, e) {
                            o[e] = i.style[_(e)] || r.getPropertyValue(e)
                        }), o
                    }
                }
                var a = "";
                if ("string" == t(e)) n || 0 === n ? a = u(e) + ":" + f(e, n) : this.each(function () {
                    this.style.removeProperty(u(e))
                }); else for (T in e)e[T] || 0 === e[T] ? a += u(T) + ":" + f(T, e[T]) + ";" : this.each(function () {
                    this.style.removeProperty(u(T))
                });
                return this.each(function () {
                    this.style.cssText += ";" + a
                })
            },
            index: function (t) {
                return t ? this.indexOf(E(t)[0]) : this.parent().children().indexOf(this[0])
            },
            hasClass: function (t) {
                return t ? j.some.call(this, function (t) {
                    return this.test(y(t))
                }, l(t)) : !1
            },
            addClass: function (t) {
                return t ? this.each(function (e) {
                    C = [];
                    var n = y(this), i = g(this, t, e, n);
                    i.split(/\s+/g).forEach(function (t) {
                        E(this).hasClass(t) || C.push(t)
                    }, this), C.length && y(this, n + (n ? " " : "") + C.join(" "))
                }) : this
            },
            removeClass: function (t) {
                return this.each(function (e) {
                    return t === b ? y(this, "") : (C = y(this), g(this, t, e, C).split(/\s+/g).forEach(function (t) {
                        C = C.replace(l(t), " ")
                    }), y(this, C.trim()), void 0)
                })
            },
            toggleClass: function (t, e) {
                return t ? this.each(function (n) {
                    var i = E(this), o = g(this, t, n, y(this));
                    o.split(/\s+/g).forEach(function (t) {
                        (e === b ? !i.hasClass(t) : e) ? i.addClass(t) : i.removeClass(t)
                    })
                }) : this
            },
            scrollTop: function (t) {
                if (this.length) {
                    var e = "scrollTop" in this[0];
                    return t === b ? e ? this[0].scrollTop : this[0].pageYOffset : this.each(e ? function () {
                        this.scrollTop = t
                    } : function () {
                        this.scrollTo(this.scrollX, t)
                    })
                }
            },
            scrollLeft: function (t) {
                if (this.length) {
                    var e = "scrollLeft" in this[0];
                    return t === b ? e ? this[0].scrollLeft : this[0].pageXOffset : this.each(e ? function () {
                        this.scrollLeft = t
                    } : function () {
                        this.scrollTo(t, this.scrollY)
                    })
                }
            },
            position: function () {
                if (this.length) {
                    var t = this[0], e = this.offsetParent(), n = this.offset(),
                        i = R.test(e[0].nodeName) ? {top: 0, left: 0} : e.offset();
                    return n.top -= parseFloat(E(t).css("margin-top")) || 0, n.left -= parseFloat(E(t).css("margin-left")) || 0, i.top += parseFloat(E(e[0]).css("border-top-width")) || 0, i.left += parseFloat(E(e[0]).css("border-left-width")) || 0, {
                        top: n.top - i.top,
                        left: n.left - i.left
                    }
                }
            },
            offsetParent: function () {
                return this.map(function () {
                    for (var t = this.offsetParent || N.body; t && !R.test(t.nodeName) && "static" == E(t).css("position");)t = t.offsetParent;
                    return t
                })
            }
        }, E.fn.detach = E.fn.remove, ["width", "height"].forEach(function (t) {
            var e = t.replace(/./, function (t) {
                return t[0].toUpperCase()
            });
            E.fn[t] = function (o) {
                var r, a = this[0];
                return o === b ? n(a) ? a["inner" + e] : i(a) ? a.documentElement["scroll" + e] : (r = this.offset()) && r[t] : this.each(function (e) {
                    a = E(this), a.css(t, g(this, o, e, a[t]()))
                })
            }
        }), Z.forEach(function (e, n) {
            var i = n % 2;
            E.fn[e] = function () {
                var e, o, r = E.map(arguments, function (n) {
                    return e = t(n), "object" == e || "array" == e || null == n ? n : W.fragment(n)
                }), a = this.length > 1;
                return r.length < 1 ? this : this.each(function (t, e) {
                    o = i ? e : e.parentNode, e = 0 == n ? e.nextSibling : 1 == n ? e.firstChild : 2 == n ? e : null, r.forEach(function (t) {
                        if (a) t = t.cloneNode(!0); else if (!o)return E(t).remove();
                        x(o.insertBefore(t, e), function (t) {
                            null == t.nodeName || "SCRIPT" !== t.nodeName.toUpperCase() || t.type && "text/javascript" !== t.type || t.src || window.eval.call(window, t.innerHTML)
                        })
                    })
                })
            }, E.fn[i ? e + "To" : "insert" + (n ? "Before" : "After")] = function (t) {
                return E(t)[e](this), this
            }
        }), W.Z.prototype = E.fn, W.uniq = S, W.deserializeValue = w, E.zepto = W, E
    }();
    window.Zepto = Zepto, void 0 === window.$ && (window.$ = Zepto), !function (t) {
        function e(t) {
            return t._zid || (t._zid = h++)
        }

        function n(t, n, r, a) {
            if (n = i(n), n.ns)var s = o(n.ns);
            return (g[e(t)] || []).filter(function (t) {
                return !(!t || n.e && t.e != n.e || n.ns && !s.test(t.ns) || r && e(t.fn) !== e(r) || a && t.sel != a)
            })
        }

        function i(t) {
            var e = ("" + t).split(".");
            return {e: e[0], ns: e.slice(1).sort().join(" ")}
        }

        function o(t) {
            return new RegExp("(?:^| )" + t.replace(" ", " .* ?") + "(?: |$)")
        }

        function r(t, e) {
            return t.del && !y && t.e in w || !!e
        }

        function a(t) {
            return x[t] || y && w[t] || t
        }

        function s(n, o, s, c, l, h, p) {
            var d = e(n), m = g[d] || (g[d] = []);
            o.split(/\s/).forEach(function (e) {
                if ("ready" == e)return t(document).ready(s);
                var o = i(e);
                o.fn = s, o.sel = l, o.e in x && (s = function (e) {
                    var n = e.relatedTarget;
                    return !n || n !== this && !t.contains(this, n) ? o.fn.apply(this, arguments) : void 0
                }), o.del = h;
                var d = h || s;
                o.proxy = function (t) {
                    if (t = u(t), !t.isImmediatePropagationStopped()) {
                        t.data = c;
                        var e = d.apply(n, t._args == f ? [t] : [t].concat(t._args));
                        return e === !1 && (t.preventDefault(), t.stopPropagation()), e
                    }
                }, o.i = m.length, m.push(o), "addEventListener" in n && n.addEventListener(a(o.e), o.proxy, r(o, p))
            })
        }

        function c(t, i, o, s, c) {
            var u = e(t);
            (i || "").split(/\s/).forEach(function (e) {
                n(t, e, o, s).forEach(function (e) {
                    delete g[u][e.i], "removeEventListener" in t && t.removeEventListener(a(e.e), e.proxy, r(e, c))
                })
            })
        }

        function u(e, n) {
            return (n || !e.isDefaultPrevented) && (n || (n = e), t.each(C, function (t, i) {
                var o = n[t];
                e[t] = function () {
                    return this[i] = b, o && o.apply(n, arguments)
                }, e[i] = T
            }), (n.defaultPrevented !== f ? n.defaultPrevented : "returnValue" in n ? n.returnValue === !1 : n.getPreventDefault && n.getPreventDefault()) && (e.isDefaultPrevented = b)), e
        }

        function l(t) {
            var e, n = {originalEvent: t};
            for (e in t)E.test(e) || t[e] === f || (n[e] = t[e]);
            return u(n, t)
        }

        var f, h = 1, p = Array.prototype.slice, d = t.isFunction, m = function (t) {
                return "string" == typeof t
            }, g = {}, v = {}, y = "onfocusin" in window, w = {focus: "focusin", blur: "focusout"},
            x = {mouseenter: "mouseover", mouseleave: "mouseout"};
        v.click = v.mousedown = v.mouseup = v.mousemove = "MouseEvents", t.event = {
            add: s,
            remove: c
        }, t.proxy = function (n, i) {
            if (d(n)) {
                var o = function () {
                    return n.apply(i, arguments)
                };
                return o._zid = e(n), o
            }
            if (m(i))return t.proxy(n[i], n);
            throw new TypeError("expected function")
        }, t.fn.bind = function (t, e, n) {
            return this.on(t, e, n)
        }, t.fn.unbind = function (t, e) {
            return this.off(t, e)
        }, t.fn.one = function (t, e, n, i) {
            return this.on(t, e, n, i, 1)
        };
        var b = function () {
            return !0
        }, T = function () {
            return !1
        }, E = /^([A-Z]|returnValue$|layer[XY]$)/, C = {
            preventDefault: "isDefaultPrevented",
            stopImmediatePropagation: "isImmediatePropagationStopped",
            stopPropagation: "isPropagationStopped"
        };
        t.fn.delegate = function (t, e, n) {
            return this.on(e, t, n)
        }, t.fn.undelegate = function (t, e, n) {
            return this.off(e, t, n)
        }, t.fn.live = function (e, n) {
            return t(document.body).delegate(this.selector, e, n), this
        }, t.fn.die = function (e, n) {
            return t(document.body).undelegate(this.selector, e, n), this
        }, t.fn.on = function (e, n, i, o, r) {
            var a, u, h = this;
            return e && !m(e) ? (t.each(e, function (t, e) {
                h.on(t, n, i, e, r)
            }), h) : (m(n) || d(o) || o === !1 || (o = i, i = n, n = f), (d(i) || i === !1) && (o = i, i = f), o === !1 && (o = T), h.each(function (f, h) {
                r && (a = function (t) {
                    return c(h, t.type, o), o.apply(this, arguments)
                }), n && (u = function (e) {
                    var i, r = t(e.target).closest(n, h).get(0);
                    return r && r !== h ? (i = t.extend(l(e), {
                        currentTarget: r,
                        liveFired: h
                    }), (a || o).apply(r, [i].concat(p.call(arguments, 1)))) : void 0
                }), s(h, e, o, i, n, u || a)
            }))
        }, t.fn.off = function (e, n, i) {
            var o = this;
            return e && !m(e) ? (t.each(e, function (t, e) {
                o.off(t, n, e)
            }), o) : (m(n) || d(i) || i === !1 || (i = n, n = f), i === !1 && (i = T), o.each(function () {
                c(this, e, i, n)
            }))
        }, t.fn.trigger = function (e, n) {
            return e = m(e) || t.isPlainObject(e) ? t.Event(e) : u(e), e._args = n, this.each(function () {
                "dispatchEvent" in this ? this.dispatchEvent(e) : t(this).triggerHandler(e, n)
            })
        }, t.fn.triggerHandler = function (e, i) {
            var o, r;
            return this.each(function (a, s) {
                o = l(m(e) ? t.Event(e) : e), o._args = i, o.target = s, t.each(n(s, e.type || e), function (t, e) {
                    return r = e.proxy(o), o.isImmediatePropagationStopped() ? !1 : void 0
                })
            }), r
        }, "focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function (e) {
            t.fn[e] = function (t) {
                return t ? this.bind(e, t) : this.trigger(e)
            }
        }), ["focus", "blur"].forEach(function (e) {
            t.fn[e] = function (t) {
                return t ? this.bind(e, t) : this.each(function () {
                    try {
                        this[e]()
                    } catch (t) {
                    }
                }), this
            }
        }), t.Event = function (t, e) {
            m(t) || (e = t, t = e.type);
            var n = document.createEvent(v[t] || "Events"), i = !0;
            if (e)for (var o in e)"bubbles" == o ? i = !!e[o] : n[o] = e[o];
            return n.initEvent(t, i, !0), u(n)
        }
    }(Zepto), !function (t) {
        function e(e, n, i) {
            var o = t.Event(n);
            return t(e).trigger(o, i), !o.isDefaultPrevented()
        }

        function n(t, n, i, o) {
            return t.global ? e(n || y, i, o) : void 0
        }

        function i(e) {
            e.global && 0 === t.active++ && n(e, null, "ajaxStart")
        }

        function o(e) {
            e.global && !--t.active && n(e, null, "ajaxStop")
        }

        function r(t, e) {
            var i = e.context;
            return e.beforeSend.call(i, t, e) === !1 || n(e, i, "ajaxBeforeSend", [t, e]) === !1 ? !1 : (n(e, i, "ajaxSend", [t, e]), void 0)
        }

        function a(t, e, i, o) {
            var r = i.context, a = "success";
            i.success.call(r, t, a, e), o && o.resolveWith(r, [t, a, e]), n(i, r, "ajaxSuccess", [e, i, t]), c(a, e, i)
        }

        function s(t, e, i, o, r) {
            var a = o.context;
            o.error.call(a, i, e, t), r && r.rejectWith(a, [i, e, t]), n(o, a, "ajaxError", [i, o, t || e]), c(e, i, o)
        }

        function c(t, e, i) {
            var r = i.context;
            i.complete.call(r, e, t), n(i, r, "ajaxComplete", [e, i]), o(i)
        }

        function u() {
        }

        function l(t) {
            return t && (t = t.split(";", 2)[0]), t && (t == E ? "html" : t == T ? "json" : x.test(t) ? "script" : b.test(t) && "xml") || "text"
        }

        function f(t, e) {
            return "" == e ? t : (t + "&" + e).replace(/[&?]{1,2}/, "?")
        }

        function h(e) {
            e.processData && e.data && "string" != t.type(e.data) && (e.data = t.param(e.data, e.traditional)), !e.data || e.type && "GET" != e.type.toUpperCase() || (e.url = f(e.url, e.data), e.data = void 0)
        }

        function p(e, n, i, o) {
            return t.isFunction(n) && (o = i, i = n, n = void 0), t.isFunction(i) || (o = i, i = void 0), {
                url: e,
                data: n,
                success: i,
                dataType: o
            }
        }

        function d(e, n, i, o) {
            var r, a = t.isArray(n), s = t.isPlainObject(n);
            t.each(n, function (n, c) {
                r = t.type(c), o && (n = i ? o : o + "[" + (s || "object" == r || "array" == r ? n : "") + "]"), !o && a ? e.add(c.name, c.value) : "array" == r || !i && "object" == r ? d(e, c, i, n) : e.add(n, c)
            })
        }

        var m, g, v = 0, y = window.document, w = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
            x = /^(?:text|application)\/javascript/i, b = /^(?:text|application)\/xml/i, T = "application/json",
            E = "text/html", C = /^\s*$/;
        t.active = 0, t.ajaxJSONP = function (e, n) {
            if (!("type" in e))return t.ajax(e);
            var i, o, c = e.jsonpCallback, u = (t.isFunction(c) ? c() : c) || "jsonp" + ++v,
                l = y.createElement("script"), f = window[u], h = function (e) {
                    t(l).triggerHandler("error", e || "abort")
                }, p = {abort: h};
            return n && n.promise(p), t(l).on("load error", function (r, c) {
                clearTimeout(o), t(l).off().remove(), "error" != r.type && i ? a(i[0], p, e, n) : s(null, c || "error", p, e, n), window[u] = f, i && t.isFunction(f) && f(i[0]), f = i = void 0
            }), r(p, e) === !1 ? (h("abort"), p) : (window[u] = function () {
                i = arguments
            }, l.src = e.url.replace(/\?(.+)=\?/, "?$1=" + u), y.head.appendChild(l), e.timeout > 0 && (o = setTimeout(function () {
                h("timeout")
            }, e.timeout)), p)
        }, t.ajaxSettings = {
            type: "GET",
            beforeSend: u,
            success: u,
            error: u,
            complete: u,
            context: null,
            global: !0,
            xhr: function () {
                return new window.XMLHttpRequest
            },
            accepts: {
                script: "text/javascript, application/javascript, application/x-javascript",
                json: T,
                xml: "application/xml, text/xml",
                html: E,
                text: "text/plain"
            },
            crossDomain: !1,
            timeout: 0,
            processData: !0,
            cache: !0
        }, t.ajax = function (e) {
            var n = t.extend({}, e || {}), o = t.Deferred && t.Deferred();
            for (m in t.ajaxSettings)void 0 === n[m] && (n[m] = t.ajaxSettings[m]);
            i(n), n.crossDomain || (n.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(n.url) && RegExp.$2 != window.location.host), n.url || (n.url = window.location.toString()), h(n), n.cache === !1 && (n.url = f(n.url, "_=" + Date.now()));
            var c = n.dataType, p = /\?.+=\?/.test(n.url);
            if ("jsonp" == c || p)return p || (n.url = f(n.url, n.jsonp ? n.jsonp + "=?" : n.jsonp === !1 ? "" : "jsonpCallback=?")), t.ajaxJSONP(n, o);
            var d, v = n.accepts[c], y = {}, w = function (t, e) {
                    y[t.toLowerCase()] = [t, e]
                }, x = /^([\w-]+:)\/\//.test(n.url) ? RegExp.$1 : window.location.protocol, b = n.xhr(),
                T = b.setRequestHeader;
            if (o && o.promise(b), n.crossDomain || w("X-Requested-With", "XMLHttpRequest"), w("Accept", v || "*/*"), (v = n.mimeType || v) && (v.indexOf(",") > -1 && (v = v.split(",", 2)[0]), b.overrideMimeType && b.overrideMimeType(v)), (n.contentType || n.contentType !== !1 && n.data && "GET" != n.type.toUpperCase()) && w("Content-Type", n.contentType || "application/x-www-form-urlencoded"), n.headers)for (g in n.headers)w(g, n.headers[g]);
            if (b.setRequestHeader = w, b.onreadystatechange = function () {
                    if (4 == b.readyState) {
                        b.onreadystatechange = u, clearTimeout(d);
                        var e, i = !1;
                        if (b.status >= 200 && b.status < 300 || 304 == b.status || 0 == b.status && "file:" == x) {
                            c = c || l(n.mimeType || b.getResponseHeader("content-type")), e = b.responseText;
                            try {
                                "script" == c ? (1, eval)(e) : "xml" == c ? e = b.responseXML : "json" == c && (e = C.test(e) ? null : t.parseJSON(e))
                            } catch (r) {
                                i = r
                            }
                            i ? s(i, "parsererror", b, n, o) : a(e, b, n, o)
                        } else s(b.statusText || null, b.status ? "error" : "abort", b, n, o)
                    }
                }, r(b, n) === !1)return b.abort(), s(null, "abort", b, n, o), b;
            if (n.xhrFields)for (g in n.xhrFields)b[g] = n.xhrFields[g];
            var E = "async" in n ? n.async : !0;
            if (b.open(n.type, n.url, E, n.username, n.password), n.withCredentials)try {
                b.withCredentials = !0
            } catch (_) {
            }
            for (g in y)T.apply(b, y[g]);
            var S = +new Date;
            return n.timeout > 0 && (d = setTimeout(function () {
                b.onreadystatechange = u, b.abort();
                var t = new Date - S;
                t < n.timeout && M.report("//stat.y.qq.com/sp/c.png", {
                    timeout: n.timeout,
                    duration: t
                }), s(null, "timeout", b, n, o)
            }, n.timeout)), b.send(n.data ? n.data : null), b
        }, t.get = function () {
            return t.ajax(p.apply(null, arguments))
        }, t.post = function () {
            var e = p.apply(null, arguments);
            return e.type = "POST", t.ajax(e)
        }, t.getJSON = function () {
            var e = p.apply(null, arguments);
            return e.dataType = "json", t.ajax(e)
        }, t.fn.load = function (e, n, i) {
            if (!this.length)return this;
            var o, r = this, a = e.split(/\s/), s = p(e, n, i), c = s.success;
            return a.length > 1 && (s.url = a[0], o = a[1]), s.success = function (e) {
                r.html(o ? t("<div>").html(e.replace(w, "")).find(o) : e), c && c.apply(r, arguments)
            }, t.ajax(s), this
        };
        var _ = encodeURIComponent;
        t.param = function (t, e) {
            var n = [];
            return n.add = function (t, e) {
                this.push(_(t) + "=" + _(e))
            }, d(n, t, e), n.join("&").replace(/%20/g, "+")
        }
    }(Zepto), !function (t) {
        function e(e) {
            return e = t(e), !(!e.width() && !e.height()) && "none" !== e.css("display")
        }

        function n(t, e) {
            t = t.replace(/=#\]/g, '="#"]');
            var n, i, o = s.exec(t);
            if (o && o[2] in a && (n = a[o[2]], i = o[3], t = o[1], i)) {
                var r = Number(i);
                i = isNaN(r) ? i.replace(/^["']|["']$/g, "") : r
            }
            return e(t, n, i)
        }

        var i = t.zepto, o = i.qsa, r = i.matches, a = t.expr[":"] = {
            visible: function () {
                return e(this) ? this : void 0
            }, hidden: function () {
                return e(this) ? void 0 : this
            }, selected: function () {
                return this.selected ? this : void 0
            }, checked: function () {
                return this.checked ? this : void 0
            }, parent: function () {
                return this.parentNode
            }, first: function (t) {
                return 0 === t ? this : void 0
            }, last: function (t, e) {
                return t === e.length - 1 ? this : void 0
            }, eq: function (t, e, n) {
                return t === n ? this : void 0
            }, contains: function (e, n, i) {
                return t(this).text().indexOf(i) > -1 ? this : void 0
            }, has: function (t, e, n) {
                return i.qsa(this, n).length ? this : void 0
            }
        }, s = new RegExp("(.*):(\\w+)(?:\\(([^)]+)\\))?$\\s*"), c = /^\s*>/, u = "Zepto" + +new Date;
        i.qsa = function (e, r) {
            return n(r, function (n, a, s) {
                try {
                    var l;
                    !n && a ? n = "*" : c.test(n) && (l = t(e).addClass(u), n = "." + u + " " + n);
                    var f = o(e, n)
                } catch (h) {
                    throw console.error("error performing selector: %o", r), h
                } finally {
                    l && l.removeClass(u)
                }
                return a ? i.uniq(t.map(f, function (t, e) {
                    return a.call(t, e, f, s)
                })) : f
            })
        }, i.matches = function (t, e) {
            return n(e, function (e, n, i) {
                return !(e && !r(t, e) || n && n.call(t, null, i) !== t)
            })
        }
    }(Zepto), !function (t) {
        t.fn.serializeArray = function () {
            var e, n = [];
            return t([].slice.call(this.get(0).elements)).each(function () {
                e = t(this);
                var i = e.attr("type");
                "fieldset" != this.nodeName.toLowerCase() && !this.disabled && "submit" != i && "reset" != i && "button" != i && ("radio" != i && "checkbox" != i || this.checked) && n.push({
                    name: e.attr("name"),
                    value: e.val()
                })
            }), n
        }, t.fn.serialize = function () {
            var t = [];
            return this.serializeArray().forEach(function (e) {
                t.push(encodeURIComponent(e.name) + "=" + encodeURIComponent(e.value))
            }), t.join("&")
        }, t.fn.submit = function (e) {
            if (e) this.bind("submit", e); else if (this.length) {
                var n = t.Event("submit");
                this.eq(0).trigger(n), n.isDefaultPrevented() || this.get(0).submit()
            }
            return this
        }
    }(Zepto), !function (t) {
        function e(t, e) {
            var n = this.os = {}, i = this.browser = {}, o = t.match(/Web[kK]it[\/]{0,1}([\d.]+)/),
                r = t.match(/(Android);?[\s\/]+([\d.]+)?/), a = !!t.match(/\(Macintosh\; Intel /),
                s = t.match(/(iPad).*OS\s([\d_]+)/), c = t.match(/(iPod)(.*OS\s([\d_]+))?/),
                u = !s && t.match(/(iPhone\sOS)\s([\d_]+)/), l = t.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),
                f = /Win\d{2}|Windows/.test(e), h = t.match(/Windows Phone ([\d.]+)/), p = l && t.match(/TouchPad/),
                d = t.match(/Kindle\/([\d.]+)/), m = t.match(/Silk\/([\d._]+)/),
                g = t.match(/(BlackBerry).*Version\/([\d.]+)/), v = t.match(/(BB10).*Version\/([\d.]+)/),
                y = t.match(/(RIM\sTablet\sOS)\s([\d.]+)/), w = t.match(/PlayBook/),
                x = t.match(/Chrome\/([\d.]+)/) || t.match(/CriOS\/([\d.]+)/), b = t.match(/Firefox\/([\d.]+)/),
                T = t.match(/\((?:Mobile|Tablet); rv:([\d.]+)\).*Firefox\/[\d.]+/),
                E = t.match(/MSIE\s([\d.]+)/) || t.match(/Trident\/[\d](?=[^\?]+).*rv:([0-9.].)/),
                C = !x && t.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/),
                _ = C || t.match(/Version\/([\d.]+)([^S](Safari)|[^M]*(Mobile)[^S]*(Safari))/);
            (i.webkit = !!o) && (i.version = o[1]), r && (n.android = !0, n.version = r[2]), u && !c && (n.ios = n.iphone = !0, n.version = u[2].replace(/_/g, ".")), s && (n.ios = n.ipad = !0, n.version = s[2].replace(/_/g, ".")), c && (n.ios = n.ipod = !0, n.version = c[3] ? c[3].replace(/_/g, ".") : null), h && (n.wp = !0, n.version = h[1]), l && (n.webos = !0, n.version = l[2]), p && (n.touchpad = !0), g && (n.blackberry = !0, n.version = g[2]), v && (n.bb10 = !0, n.version = v[2]), y && (n.rimtabletos = !0, n.version = y[2]), w && (i.playbook = !0), d && (n.kindle = !0, n.version = d[1]), m && (i.silk = !0, i.version = m[1]), !m && n.android && t.match(/Kindle Fire/) && (i.silk = !0), x && (i.chrome = !0, i.version = x[1]), b && (i.firefox = !0, i.version = b[1]), T && (n.firefoxos = !0, n.version = T[1]), E && (i.ie = !0, i.version = E[1]), _ && (a || n.ios || f) && (i.safari = !0, n.ios || (i.version = _[1])), C && (i.webview = !0), n.tablet = !!(s || w || r && !t.match(/Mobile/) || b && t.match(/Tablet/) || E && !t.match(/Phone/) && t.match(/Touch/)), n.phone = !(n.tablet || n.ipod || !(r || u || l || g || v || x && t.match(/Android/) || x && t.match(/CriOS\/([\d.]+)/) || b && t.match(/Mobile/) || E && t.match(/Touch/)))
        }

        e.call(t, navigator.userAgent, navigator.platform), t.__detect = e
    }(Zepto), !function (t, e) {
        function n(t) {
            return t.replace(/([a-z])([A-Z])/, "$1-$2").toLowerCase()
        }

        function i(t) {
            return o ? o + t : t.toLowerCase()
        }

        var o, r, a, s, c, u, l, f, h, p, d = "", m = {Webkit: "webkit", Moz: "", O: "o"}, g = window.document,
            v = g.createElement("div"),
            y = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i, w = {};
        t.each(m, function (t, n) {
            return v.style[t + "TransitionProperty"] !== e ? (d = "-" + t.toLowerCase() + "-", o = n, !1) : void 0
        }), r = d + "transform", w[a = d + "transition-property"] = w[s = d + "transition-duration"] = w[u = d + "transition-delay"] = w[c = d + "transition-timing-function"] = w[l = d + "animation-name"] = w[f = d + "animation-duration"] = w[p = d + "animation-delay"] = w[h = d + "animation-timing-function"] = "", t.fx = {
            off: o === e && v.style.transitionProperty === e,
            speeds: {_default: 400, fast: 200, slow: 600},
            cssPrefix: d,
            transitionEnd: i("TransitionEnd"),
            animationEnd: i("AnimationEnd")
        }, t.fn.animate = function (n, i, o, r, a) {
            return t.isFunction(i) && (r = i, o = e, i = e), t.isFunction(o) && (r = o, o = e), t.isPlainObject(i) && (o = i.easing, r = i.complete, a = i.delay, i = i.duration), i && (i = ("number" == typeof i ? i : t.fx.speeds[i] || t.fx.speeds._default) / 1e3), a && (a = parseFloat(a) / 1e3), this.anim(n, i, o, r, a)
        }, t.fn.anim = function (i, o, d, m, g) {
            var v, x, b, T = {}, E = "", C = this, _ = t.fx.transitionEnd, S = !1;
            if (o === e && (o = t.fx.speeds._default / 1e3), g === e && (g = 0), t.fx.off && (o = 0), "string" == typeof i) T[l] = i, T[f] = o + "s", T[p] = g + "s", T[h] = d || "linear", _ = t.fx.animationEnd; else {
                x = [];
                for (v in i)y.test(v) ? E += v + "(" + i[v] + ") " : (T[v] = i[v], x.push(n(v)));
                E && (T[r] = E, x.push(r)), o > 0 && "object" == typeof i && (T[a] = x.join(", "), T[s] = o + "s", T[u] = g + "s", T[c] = d || "linear")
            }
            return b = function (e) {
                if ("undefined" != typeof e) {
                    if (e.target !== e.currentTarget)return;
                    t(e.target).unbind(_, b)
                } else t(this).unbind(_, b);
                S = !0, t(this).css(w), m && m.call(this)
            }, o > 0 && (this.bind(_, b), setTimeout(function () {
                S || b.call(C)
            }, 1e3 * o + 25)), this.size() && this.get(0).clientLeft, this.css(T), 0 >= o && setTimeout(function () {
                C.each(function () {
                    b.call(this)
                })
            }, 0), this
        }, v = null
    }(Zepto);
    var ghostClick = {
        _coordinates: [], _failOnPrevent: ["textarea", "input"], mark: function (t, e, n) {
            var i = this;
            this._coordinates.push({x: t, y: e, el: n}), setTimeout(function () {
                i.unmark()
            }, 1e3)
        }, unmark: function () {
            return this._coordinates.shift()
        }, onMouseDown: function (t) {
            ghostClick._coordinates.forEach(function (e) {
                var n = e.x, i = e.y, o = e.el,
                    r = ghostClick._failOnPrevent.indexOf(t.target.nodeName.toLocaleLowerCase()) < 0;
                return r && o != t.target && Math.abs(t.clientX - n) < 25 && Math.abs(window.scrollY + t.clientY - i) < 25 ? (t.stopPropagation(), t.preventDefault(), !1) : void 0
            })
        }
    };
    document.addEventListener("mousedown", ghostClick.onMouseDown, !0), document.addEventListener("click", ghostClick.onMouseDown, !0), document.addEventListener("click", ghostClick.onMouseDown);
    var touch = {}, touchTimeout, tapTimeout, swipeTimeout, longTapDelay = 750, longTapTimeout;
    window.__hasInitEvent || ($(document).ready(function () {
        var t, e;
        $(document).on("touchstart", function (n) {
            t = Date.now(), e = t - (touch.last || t), touch.el = $(parentIfText(n.touches[0].target)), touchTimeout && clearTimeout(touchTimeout), touch.x1 = n.touches[0].pageX, touch.y1 = n.touches[0].pageY, e > 0 && 250 >= e && (touch.isDoubleTap = !0), touch.last = t, touch.isMove = !1, longTapTimeout = setTimeout(longTap, longTapDelay), touch.x2 = touch.y2 = null
        }).on("touchmove", function (t) {
            cancelLongTap(), touch.isMove = !0, touch.x2 = t.touches[0].pageX, touch.y2 = t.touches[0].pageY, Math.abs(touch.x1 - touch.x2) > 30 && t.preventDefault()
        }).on("touchend", function () {
            if (cancelLongTap(), touch.el) {
                ghostClick.mark(touch.x1, touch.y1, touch.el.get(0));
                var t = !1;
                touch.isMove && touch.x2 && Math.abs(touch.x1 - touch.x2) < 5 && touch.y2 && Math.abs(touch.y1 - touch.y2) < 5 && (t = !0), touch.x2 && Math.abs(touch.x1 - touch.x2) > 30 || touch.y2 && Math.abs(touch.y1 - touch.y2) > 30 ? swipeTimeout = setTimeout(function () {
                    touch.el && (touch.el.trigger("swipe"), touch.el.trigger("swipe" + swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)), touch = {})
                }, 0) : "last" in touch && (!touch.isMove || t) && (tapTimeout = setTimeout(function () {
                        var t = $.Event("tap");
                        t.cancelTouch = cancelAll, touch.el && touch.el.trigger(t), touch.isDoubleTap && touch.el ? (touch.el.trigger("doubleTap"), touch = {}) : touchTimeout = setTimeout(function () {
                            touchTimeout = null, touch.el && (touch.el.trigger("singleTap"), touch = {})
                        }, 250)
                    }, 0))
            }
        }).on("touchcancel", cancelAll), $(window).on("scroll", cancelAll)
    }), window.__hasInitEvent = !0), ["swipe", "swipeLeft", "swipeRight", "swipeUp", "swipeDown", "doubleTap", "tap", "singleTap", "longTap"].forEach(function (t) {
        $.fn[t] = function (e) {
            return this.on(t, e)
        }
    }), !function (t) {
        t.cookie = {
            set: function (t, e, n, i, o) {
                if (o) {
                    var r = new Date;
                    r.setTime(r.getTime() + 36e5 * o)
                }
                document.cookie = t + "=" + e + "; " + (r ? "expires=" + r.toGMTString() + ";" : "") + "domain=" + (n || location.host) + ";path=" + (i || "/") + ";"
            }, get: function (t) {
                var e, n = function (t) {
                    if (!t)return t;
                    for (; t != decodeURIComponent(t);)t = decodeURIComponent(t);
                    for (var e = ["<", ">", "'", '"', "%3c", "%3e", "%27", "%22", "%253c", "%253e", "%2527", "%2522"], n = ["&#x3c;", "&#x3e;", "&#x27;", "&#x22;", "%26%23x3c%3B", "%26%23x3e%3B", "%26%23x27%3B", "%26%23x22%3B", "%2526%2523x3c%253B", "%2526%2523x3e%253B", "%2526%2523x27%253B", "%2526%2523x22%253B"], i = 0; i < e.length; i++)t = t.replace(new RegExp(e[i], "gi"), n[i]);
                    return t
                };
                return n((e = document.cookie.match(RegExp("(^|;\\s*)" + t + "=([^;]*)(;|$)"))) ? decodeURIComponent(e[2]) : "")
            }, del: function (t, e, n) {
                document.cookie = t + "=; expires=Mon, 26 Jul 1997 05:00:00 GMT;" + (n ? "path=" + n + "; " : "path=/; ") + "domain=" + (e || location.host) + ";"
            }
        }
    }(Zepto);
    var gmu = gmu || {
            version: "@version", $: window.Zepto, staticCall: function (t) {
                var e = t.fn, n = [].slice, i = t();
                return i.length = 1, function (t, o) {
                    return i[0] = t, e[o].apply(i, n.call(arguments, 2))
                }
            }(Zepto)
        };
    !function (t, e) {
        function n(t, e, n) {
            (t || "").split(c).forEach(function (t) {
                n(t, e)
            })
        }

        function i(t) {
            return new RegExp("(?:^| )" + t.replace(" ", " .* ?") + "(?: |$)")
        }

        function o(t) {
            var e = ("" + t).split(".");
            return {e: e[0], ns: e.slice(1).sort().join(" ")}
        }

        function r(t, e, n, r) {
            var a, s;
            return s = o(e), s.ns && (a = i(s.ns)), t.filter(function (t) {
                return !(!t || s.e && t.e !== s.e || s.ns && !a.test(t.ns) || n && t.cb !== n && t.cb._cb !== n || r && t.ctx !== r)
            })
        }

        function a(t, n) {
            return this instanceof a ? (n && e.extend(this, n), this.type = t, this) : new a(t, n)
        }

        var s = [].slice, c = /\s+/, u = function () {
            return !1
        }, l = function () {
            return !0
        };
        a.prototype = {
            isDefaultPrevented: u, isPropagationStopped: u, preventDefault: function () {
                this.isDefaultPrevented = l
            }, stopPropagation: function () {
                this.isPropagationStopped = l
            }
        }, t.event = {
            on: function (t, e, i) {
                var r, a = this;
                return e ? (r = this._events || (this._events = []), n(t, e, function (t, e) {
                    var n = o(t);
                    n.cb = e, n.ctx = i, n.ctx2 = i || a, n.id = r.length, r.push(n)
                }), this) : this
            }, one: function (t, e, i) {
                var o = this;
                return e ? (n(t, e, function (t, e) {
                    var n = function () {
                        return o.off(t, n), e.apply(i || o, arguments)
                    };
                    n._cb = e, o.on(t, n, i)
                }), this) : this
            }, off: function (t, e, i) {
                var o = this._events;
                return o ? t || e || i ? (n(t, e, function (t, e) {
                    r(o, t, e, i).forEach(function (t) {
                        delete o[t.id]
                    })
                }), this) : (this._events = [], this) : this
            }, trigger: function (t) {
                var e, n, i, o, c, u = -1;
                if (!this._events || !t)return this;
                if ("string" == typeof t && (t = new a(t)), e = s.call(arguments, 1), t.args = e, e.unshift(t), n = r(this._events, t.type))for (o = n.length; ++u < o;)if ((i = t.isPropagationStopped()) || !1 === (c = n[u]).cb.apply(c.ctx2, e)) {
                    i || (t.stopPropagation(), t.preventDefault());
                    break
                }
                return this
            }
        }, t.Event = a
    }(gmu, gmu.$), !function (t) {
        t.parseTpl = function (t, e) {
            var n = "var __p=[];with(obj||{}){__p.push('" + t.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/<%=([\s\S]+?)%>/g, function (t, e) {
                        return "'," + e.replace(/\\'/, "'") + ",'"
                    }).replace(/<%([\s\S]+?)%>/g, function (t, e) {
                        return "');" + e.replace(/\\'/, "'").replace(/[\r\n\t]/g, " ") + "__p.push('"
                    }).replace(/\r/g, "\\r").replace(/\n/g, "\\n").replace(/\t/g, "\\t") + '\');}return __p.join("");',
                i = new Function("obj", n);
            return e ? i(e) : i
        }
    }(Zepto), !function (t, e, n) {
        function i(t) {
            return "[object Object]" === d.call(t)
        }

        function o(t, e) {
            t && Object.keys(t).forEach(function (n) {
                e(n, t[n])
            })
        }

        function r(t) {
            try {
                t = "true" === t ? !0 : "false" === t ? !1 : "null" === t ? null : +t + "" === t ? +t : /(?:\{[\s\S]*\}|\[[\s\S]*\])$/.test(t) ? JSON.parse(t) : t
            } catch (e) {
                t = n
            }
            return t
        }

        function a(t) {
            for (var e, i, o = {}, a = t && t.attributes, s = a && a.length; s--;)i = a[s], e = i.name, "data-" === e.substring(0, 5) && (e = e.substring(5), i = r(i.value), i === n || (o[e] = i));
            return o
        }

        function s(o) {
            var r = o.substring(0, 1).toLowerCase() + o.substring(1), a = e.fn[r];
            e.fn[r] = function (r) {
                var a, s, c = p.call(arguments, 1), u = "string" == typeof r && r;
                return e.each(this, function (l, f) {
                    if (s = v(f, o) || new t[o](f, i(r) ? r : n), "this" === u)return a = s, !1;
                    if (u) {
                        if (!e.isFunction(s[u]))throw new Error("组件没有此方法：" + u);
                        if (a = s[u].apply(s, c), a !== n && a !== s)return !1;
                        a = n
                    }
                }), a !== n ? a : this
            }, e.fn[r].noConflict = function () {
                return e.fn[r] = a, this
            }
        }

        function c(t, n) {
            var i = this;
            t.superClass && c.call(i, t.superClass, n), o(v(t, "options"), function (t, o) {
                o.forEach(function (o) {
                    var r = o[0], a = o[1];
                    ("*" === r || e.isFunction(r) && r.call(i, n[t]) || r === n[t]) && a.call(i)
                })
            })
        }

        function u(t, i) {
            var r = this;
            t.superClass && u.call(r, t.superClass, i), o(v(t, "plugins"), function (t, a) {
                i[t] !== !1 && (o(a, function (t, i) {
                    var o;
                    r[t] = e.isFunction(i) && (o = r[t]) ? function () {
                        var t, e = r.origin;
                        return r.origin = o, t = i.apply(r, arguments), e === n ? delete r.origin : r.origin = e, t
                    } : i
                }), a._init.call(r))
            })
        }

        function l() {
            for (var t, n = p.call(arguments), o = n.length; o--;)t = t || n[o], i(n[o]) || n.splice(o, 1);
            return n.length ? e.extend.apply(null, [!0, {}].concat(n)) : t
        }

        function f(t, o, r, s, f) {
            var h, p = this;
            return i(s) && (f = s, s = n), f && f.el && (s = e(f.el)), s && (p.$el = e(s), s = p.$el[0]), h = p._options = l(o.options, a(s), f), p.template = l(o.template, h.template), p.tpl2html = l(o.tpl2html, h.tpl2html), p.widgetName = t.toLowerCase(), p.eventNs = "." + p.widgetName + r, p._init(h), p._options.setup = p.$el && p.$el.parent()[0] ? !0 : !1, c.call(p, o, h), u.call(p, o, h), p._create(), p.trigger("ready"), s && v(s, t, p) && p.on("destroy", function () {
                v(s, t, null)
            }), p
        }

        function h(i, r, a) {
            function s(t, e) {
                if ("Base" === i)throw new Error("Base类不能直接实例化");
                return this instanceof s ? f.call(this, i, s, c++, t, e) : new s(t, e)
            }

            "function" != typeof a && (a = t.Base);
            var c = 1, u = 1;
            return e.extend(s, {
                register: function (t, e) {
                    var n = v(s, "plugins") || v(s, "plugins", {});
                    return e._init = e._init || m, n[t] = e, s
                }, option: function (t, e, n) {
                    var i = v(s, "options") || v(s, "options", {});
                    return i[t] || (i[t] = []), i[t].push([e, n]), s
                }, inherits: function (t) {
                    return h(i + "Sub" + u++, t, s)
                }, extend: function (t) {
                    var e = s.prototype, i = a.prototype;
                    g.forEach(function (e) {
                        t[e] = l(a[e], t[e]), t[e] && (s[e] = t[e]), delete t[e]
                    }), o(t, function (t, o) {
                        e[t] = "function" == typeof o && i[t] ? function () {
                            var e, r = this.$super;
                            return this.$super = function () {
                                var e = p.call(arguments, 1);
                                return i[t].apply(this, e)
                            }, e = o.apply(this, arguments), r === n ? delete this.$super : this.$super = r, e
                        } : o
                    })
                }
            }), s.superClass = a, s.prototype = Object.create(a.prototype), s.extend(r), s
        }

        var p = [].slice, d = Object.prototype.toString, m = function () {
        }, g = ["options", "template", "tpl2html"], v = function () {
            var t = {}, e = 0, i = "_gid";
            return function (o, r, a) {
                var s = o[i] || (o[i] = ++e), c = t[s] || (t[s] = {});
                return a !== n && (c[r] = a), null === a && delete c[r], c[r]
            }
        }(), y = t.event;
        t.define = function (e, n, i) {
            t[e] = h(e, n, i), s(e)
        }, t.isWidget = function (e, n) {
            return n = "string" == typeof n ? t[n] || m : n, n = n || t.Base, e instanceof n
        }, t.Base = h("Base", {
            _init: m, _create: m, getEl: function () {
                return this.$el
            }, on: y.on, one: y.one, off: y.off, trigger: function (n) {
                var i = "string" == typeof n ? new t.Event(n) : n, o = [i].concat(p.call(arguments, 1)),
                    r = this._options[i.type], a = this.getEl();
                return r && e.isFunction(r) && !1 === r.apply(this, o) && (i.stopPropagation(), i.preventDefault()), y.trigger.apply(this, o), a && a.triggerHandler(i, (o.shift(), o)), this
            }, tpl2html: function (t, n) {
                var i = this.template;
                return i = "string" == typeof t ? i[t] : (n = t, i), n || ~i.indexOf("<%") ? e.parseTpl(i, n) : i
            }, destroy: function () {
                this.$el && this.$el.off(this.eventNs), this.trigger("destroy"), this.off(), this.destroyed = !0
            }
        }, Object), e.ui = t
    }(gmu, gmu.$), !function (t) {
        function e() {
            var t = n.attr("hl-cls");
            clearTimeout(i), n.removeClass(t).removeAttr("hl-cls"), n = null, o.off("touchend touchmove touchcancel", e)
        }

        var n, i, o = t(document);
        t.fn.highlight = function (r, a) {
            return this.each(function () {
                var s = t(this);
                s.css("-webkit-tap-highlight-color", "rgba(255,255,255,0)").off("touchstart.hl"), r && s.on("touchstart.hl", function (c) {
                    var u;
                    n = a ? (u = t(c.target).closest(a, this)) && u.length && u : s, n && (n.attr("hl-cls", r), i = setTimeout(function () {
                        n.addClass(r)
                    }, 100), o.on("touchend touchmove touchcancel", e))
                })
            })
        }
    }(Zepto), !function (t) {
        t.matchMedia = function () {
            var e = 0, n = "gmu-media-detect", i = t.fx.transitionEnd, o = t.fx.cssPrefix,
                r = t("<style></style>").append("." + n + "{" + o + "transition: width 0.001ms; width: 0; position: absolute; clip: rect(1px, 1px, 1px, 1px);}\n").appendTo("head");
            return function (o) {
                var a, s, c = n + e++, u = [];
                return r.append("@media " + o + " { #" + c + " { width: 1px; } }\n"), a = t('<div class="' + n + '" id="' + c + '"></div>').appendTo("body").on(i, function () {
                    s.matches = 1 === a.width(), t.each(u, function (e, n) {
                        t.isFunction(n) && n.call(s, s)
                    })
                }), s = {
                    matches: 1 === a.width(), media: o, addListener: function (t) {
                        return u.push(t), this
                    }, removeListener: function (t) {
                        var e = u.indexOf(t);
                        return ~e && u.splice(e, 1), this
                    }
                }
            }
        }()
    }(Zepto), !function (t) {
        t.extend(t, {
            throttle: function (e, n, i) {
                function o() {
                    function t() {
                        a = Date.now(), n.apply(s, u)
                    }

                    function o() {
                        r = void 0
                    }

                    var s = this, c = Date.now() - a, u = arguments;
                    i && !r && t(), r && clearTimeout(r), void 0 === i && c > e ? t() : r = setTimeout(i ? o : t, void 0 === i ? e - c : e)
                }

                var r, a = 0;
                return "function" != typeof n && (i = n, n = e, e = 250), o._zid = n._zid = n._zid || t.proxy(n)._zid, o
            }, debounce: function (e, n, i) {
                return void 0 === n ? t.throttle(250, e, !1) : t.throttle(e, n, void 0 === i ? !1 : i !== !1)
            }
        })
    }(Zepto), !function (t, e) {
        function n() {
            t(e).on("scroll", t.debounce(80, function () {
                t(e).trigger("scrollStop")
            }, !1))
        }

        function i() {
            t(e).off("scroll"), n()
        }

        n(), t(e).on("pageshow", function (n) {
            n.persisted && t(e).off("touchstart", i).one("touchstart", i)
        })
    }(Zepto, window), $(function () {
        $.mediaQuery = {ortchange: "screen and (width: " + window.innerWidth + "px)"}, $.matchMedia($.mediaQuery.ortchange).addListener(function () {
            $(window).trigger("ortchange")
        })
    })
} catch (e) {}